[Dome9]特定のIAMロールに特定のIAMポリシーが設定されていることを評価する
こんにちは、岩城です。
前に以下のようなエントリを書きました。
この時は、カスタムルールの作成方法について紹介することが目的であったため、ルールの内容は簡単なものを作成していました。
今回、特定のIAMロールに特定のIAMポリシーが設定されていることを評価するルールを作成する機会がありましたので紹介したいと思います。
結論
カスタムルールに設定する評価式は、Dome9独自言語であるGSLで記述する必要があります。
たとえば、IAMロールdome9-test-ec2
に対し、AWS管理ポリシーであるAmazonEC2ReadOnlyAccess
とAmazonS3ReadOnlyAccess
がIAMポリシーに設定されていることを評価したい場合があるとします。
以下の評価式を用いることで評価できます。
IamRole where arn='arn:aws:iam::xxxxxxxxxxxx:role/dome9-test-ec2' should have managedPolicies with [ name='AmazonEC2ReadOnlyAccess' ] and managedPolicies with [ name='AmazonS3ReadOnlyAccess' ]
これだけでは内容が薄すぎるので、上の評価式を定義する際の考え方を以下にまとめます。
どうやって評価式を考えるか
基本的に<Target> should / should not / where <Condition>
のように定義します。
先ほどの評価式をベースに考えます。
①評価対象とするターゲット選択する
本エントリではIamRole
を選択していますが、他にも様々なターゲットがサポートされています。
②評価アクションを選択する
should have
、should not have
、where
を選択できます。
- should have
Condition
を満たすとき、trueとする
- should not have
Condition
を満たさないとき、trueとする
- where
where
はオプションであり、対象のリソースを絞り込みます- 通常は評価対象となるAWSアカウント上にあるターゲットの全リソースを対象としますが、
where
を使うとあるIAMロールだけを評価する、みたいなことができます
ここまででIAMロールdome9-test-ec2
のみを対象できました。
③Conditionを定義する
Condition
には、特定のプロパティがどういう状態であってほしいかを定義します。
このプロパティはDome9が持つターゲットリソースの情報です。恐らくAWSのAPIを実行して返ってきた結果を格納しているものだと思われますが、中にはそれらしくない値も含まれているので、Dome9が持ちたい形式に変換された情報だと思っています。
この情報から、本エントリで取り上げているmanagedPolicies
は配列であり、各配列にはarn
とname
があるため、特定のAWS管理ポリシーが設定されているかを評価するにはARNか名前を指定すれば実現できそうだと分かります。
Array Conditions
はその名のとおり、配列における評価方法を示します。今回はwith
を選択します。
2つのAWS管理ポリシーが設定されていることを確認したいので、ポリシーごとにmanagedPolicies
を定義してand
で連結します。
ちなみに、2つの管理ポリシーのうち、どちらか一方だけ設定されていることを確認したい場合は、1つのmanagedPolicies
内でor
で列挙するだけで良いです。
おわりに
Dome9は予め多数のマネージドルールが提供されており、リソースがベストプラクティスやコンプライアンスフレームワークに沿った設定がされているかをすぐにチェックできます。
一方で特定のIAMロールに対して、特定のIAMポリシーが設定されているなどといった、ユーザー環境に特化したチェックはデフォルトではできません。
本エントリで紹介したようなカスタムルールを定義することで柔軟でチェックできるようになります。
本エントリがどなたかのお役に立てれば幸いです。